package main

import "fmt"

//数组是具有相同唯一类型的一组已编号且长度固定的数据项序列（这是一种同构的数据结构）；
// 这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。数组长度必须是一个常量表达式，并且必须是一个非负整数。
// 需要强调：数组长度也是数组类型的一部分。 数组的长度固定，无法扩容。


func ArrayTest(){
	var balance [10] float32 //10个float型的数组，初始值是10个0,数组“零值”状态
	fmt.Println(balance)  //数值类型的数组  初始值均为0
	balance[0] = 111    //设置数组中元素的值
	fmt.Println(balance,len(balance))
	fmt.Println(balance[0])  // 取出数组中的第一个元素

	//数组在定义初始化的时候，长度可以指定，也可以不指定让编译器自动推断。
	arr := [5]int{22,33,44,55,66}//定义并初始化长度为5的数组
	fmt.Println(arr, len(arr))

	var arr2 = []int{4,6,8,9,0}//不声明长度
	var arr3 = [...]float32{12.,3.,4.,5.}//不声明长度
	q := [...] string{"a","b","c"} //不声明长度
	r := [...] int{99:-1} //长度为100的数组 只有最后一个是-1  其他全是0

	fmt.Println(arr2,len(arr2))
	fmt.Println(arr3,len(arr3))
	fmt.Println(q,len(q))
	fmt.Println(r,len(r))
	fmt.Println(r[len(r)-1])
	//fmt.Println(r[101]) //错误
	fmt.Println(r[:]) //输出数组所有元素
	fmt.Println(r[:1])
}


func ArrayTest2(){
	myArray := [3][4]int{{11,22,33,44},
		{11,22,33,44},
		{11,22,33,44}}
	//一维数组长度
	fmt.Println(len(myArray))
	//二维数组长度
	fmt.Println(len(myArray[1]))
	//整个数组
	fmt.Println(myArray)
	for index,value := range myArray{
		//value 只是 myArray 某个索引位置的值的一个拷贝，不能用来修改 myArray 该索引位置的值
		fmt.Println(index,value)
	}

	var arr [5]int
	for i:=0;i<len(arr);i++{
		arr[i] = i*100
	}
	fmt.Println(arr)

	for i:=0;i<len(arr);i++{
		fmt.Printf("Array at index %d is %d\n",i,arr[i])
	}
}


//求均值
func ArrayTest3(){
	sum := 0.0
	var avg float64
	score := []float64{1,2,3,4,5,6}  //此处不能是float32

	switch len(score) {
	case 0:
		avg = 0
	default:
		for _, v := range score{
			sum += v
		}
		avg = sum/float64(len(score))
	}
	fmt.Println(avg)
}


//数组作为函数参数
func modify_array(array [5]int){
	for index,value := range array{
		array[index] = value*100
	}
	fmt.Println(array)
}

func main() {
	//ArrayTest()
	//ArrayTest2()
	//ArrayTest3()

	arr := [5]int{1,2,3,4,5}
	modify_array(arr)
	fmt.Println(arr)
}